Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

{devel}[system/system] ReFrame v4.7.1 w/ Python 3.6 #22058

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

gkaf89
Copy link

@gkaf89 gkaf89 commented Dec 18, 2024

(created using eb --new-pr)

…Frame-4.7.1-GCCcore-13.2.0.eb, ReFrame-4.7.1-GCCcore-13.3.0.eb
Copy link

Updated software ReFrame-4.7.1-GCCcore-13.2.0.eb

Diff against ReFrame-4.7.1.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
index afb1601f60..d1851eb663 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
@@ -6,64 +6,27 @@ version = '4.7.1'
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = SYSTEM
+toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
 
-allow_system_deps = [('Python', SYS_PYTHON_VERSION)]
-
-# Required by lxml, which is installed by ReFrame's bootstrap installer
-osdependencies = [
-    ('libxml2'),
-    ('libxslt', 'libxslt1.1'),
+builddependencies = [
+    ('binutils', '2.40'),
+    ('cURL', '8.3.0'),  # Used by ReFrame to download pip in the bootstrap
 ]
 
-# We use pip, setuptools and wheel compatible with Python 3.7 and above
-# Note that ReFrame itself is compatible also with Python 3.6
-# As listed in the python_requires in https://github.com/reframe-hpc/reframe/blob/v4.7.1/setup.cfg
-# To use with Python 3.6, please install ReFrame-4.7.1-Python-3.6.eb instead
-req_py_majver = 3
-req_py_minver = 7
+# Note that for ReFrame's CPU autodetect to work
+# the system also needs to provide (new enough versions of) these dependencies
+dependencies = [
+    ('Python', '3.11.5'),
+    ('libxslt', '1.1.38'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+    ('libxml2', '2.11.5'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+]
 
 exts_list = [
-    # stick to pip 24.0, which is compatible with Python 3.7
-    # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
-    ('pip', '24.0', {
-        'use_pip': False,
-        'checksums': ['ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2'],
-    }),
-    # Require new enough setuptools to work with Python 3.12, which doesn't have pkgutil.ImpImporter anymore
-    # See https://github.com/pypa/setuptools/commit/6653e747c3815b140156249205397ef3719581ee
-    # 68.0.0 is the latest compatible with Python 3.7
-    ('setuptools', '68.0.0', {
-        'use_pip': False,
-        'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
-        'checksums': ['baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235'],
-    }),
-    # stick to wheel 0.42.0, which is compatible with Python 3.7
-    ('wheel', '0.42.0', {
-        'source_tmpl': 'wheel-%(version)s-py3-none-any.whl',
-        'checksums': ['177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d'],
-    }),
-    # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
-    # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
-    # so that ReFrame (and only ReFrame) will find & use all of these dependencies.
-    # In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
-    # b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
-    # a test will pick up on any python deps from ReFrame itself.
-    # For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
-    # for this setup.
     ('reframe', version, {
-        # Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
         'download_dep_fail': False,
-        # ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
-        # Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
-        'sanity_pip_check': False,
-        # Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
-        # This step would fail, since the regular python interpreter wouldn't find the additional packages in
-        # %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
-        # reframe command.
         'modulename': False,
-        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
-                          "./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        'sanity_pip_check': False,
         'source_tmpl': 'v%(version)s.tar.gz',
         'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
         'checksums': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
@@ -86,4 +49,10 @@ sanity_check_paths = {
 
 sanity_check_commands = ['reframe --version']
 
+# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
+# any tests by default
+modextravars = {
+    'RFM_PURGE_ENVIRONMENT': '1',
+}
+
 moduleclass = 'devel'
Diff against ReFrame-4.7.1-Python-3.6.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
index 1d11c9a167..d1851eb663 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
@@ -1,73 +1,32 @@
-# This EasyConfig is made with older setuptools and wheel versions, so that it still works with Python-3.6.X
-# For newer python versions, we suggest to use ReFrame-4.6.2.eb (without suffix)
 easyblock = 'PythonBundle'
 
 name = 'ReFrame'
 version = '4.7.1'
-versionsuffix = '-Python-3.6'
 
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = SYSTEM
+toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
 
-allow_system_deps = [('Python', SYS_PYTHON_VERSION)]
-
-# Required by lxml, which is installed by ReFrame's bootstrap installer
-osdependencies = [
-    ('libxml2'),
-    ('libxslt', 'libxslt1.1'),
+builddependencies = [
+    ('binutils', '2.40'),
+    ('cURL', '8.3.0'),  # Used by ReFrame to download pip in the bootstrap
 ]
 
-# Listed as python_requires in https://github.com/reframe-hpc/reframe/blob/v4.6.2/setup.cfg
-req_py_majver = 3
-req_py_minver = 6
-
-# The setuptools in this EasyConfig is the latest that works for Python 3.6, but is too old for Python 3.12
-# See https://github.com/easybuilders/easybuild-easyconfigs/pull/21269#discussion_r1741570244
-max_py_majver = 3
-max_py_minver = 11
+# Note that for ReFrame's CPU autodetect to work
+# the system also needs to provide (new enough versions of) these dependencies
+dependencies = [
+    ('Python', '3.11.5'),
+    ('libxslt', '1.1.38'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+    ('libxml2', '2.11.5'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+]
 
 exts_list = [
-    # stick to pip 21.3.1, which is compatible with Python 3.6
-    # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
-    ('pip', '21.3.1', {
-        'use_pip': False,
-        'checksums': ['fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a'],
-    }),
-    # Require new enough setuptools to install with e.g. pyproject.toml
-    # 59.6.0 is the latest compatible with Python 3.6
-    ('setuptools', '59.6.0', {
-        'use_pip': False,
-        'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
-        'checksums': ['22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373'],
-    }),
-    # stick to wheel 0.37.1, which is compatible with Python 3.6
-    ('wheel', '0.37.1', {
-        'source_tmpl': 'wheel-%(version)s-py2.py3-none-any.whl',
-        'checksums': ['4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a'],
-    }),
-    # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
-    # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
-    # so that ReFrame (and only ReFrame) will find & use all of these dependencies.
-    # In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
-    # b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
-    # a test will pick up on any python deps from ReFrame itself.
-    # For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
-    # for this setup.
     ('reframe', version, {
-        # Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
         'download_dep_fail': False,
-        # ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
-        # Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
-        'sanity_pip_check': False,
-        # Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
-        # This step would fail, since the regular python interpreter wouldn't find the additional packages in
-        # %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
-        # reframe command.
         'modulename': False,
-        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
-                          "./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        'sanity_pip_check': False,
         'source_tmpl': 'v%(version)s.tar.gz',
         'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
         'checksums': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
@@ -90,4 +49,10 @@ sanity_check_paths = {
 
 sanity_check_commands = ['reframe --version']
 
+# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
+# any tests by default
+modextravars = {
+    'RFM_PURGE_ENVIRONMENT': '1',
+}
+
 moduleclass = 'devel'
Diff against ReFrame-4.7.1-GCCcore-13.3.0.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
index c0e95bf7b1..d1851eb663 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
@@ -6,19 +6,19 @@ version = '4.7.1'
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = {'name': 'GCCcore', 'version': '13.3.0'}
+toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
 
 builddependencies = [
-    ('binutils', '2.42'),
-    ('cURL', '8.7.1'),  # Used by ReFrame to download pip in the bootstrap
+    ('binutils', '2.40'),
+    ('cURL', '8.3.0'),  # Used by ReFrame to download pip in the bootstrap
 ]
 
 # Note that for ReFrame's CPU autodetect to work
 # the system also needs to provide (new enough versions of) these dependencies
 dependencies = [
-    ('Python', '3.12.3'),
-    ('libxslt', '1.1.42'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
-    ('libxml2', '2.12.7'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+    ('Python', '3.11.5'),
+    ('libxslt', '1.1.38'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+    ('libxml2', '2.11.5'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
 ]
 
 exts_list = [

Updated software ReFrame-4.7.1-GCCcore-13.3.0.eb

Diff against ReFrame-4.7.1.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
index afb1601f60..c0e95bf7b1 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
@@ -6,64 +6,27 @@ version = '4.7.1'
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = SYSTEM
+toolchain = {'name': 'GCCcore', 'version': '13.3.0'}
 
-allow_system_deps = [('Python', SYS_PYTHON_VERSION)]
-
-# Required by lxml, which is installed by ReFrame's bootstrap installer
-osdependencies = [
-    ('libxml2'),
-    ('libxslt', 'libxslt1.1'),
+builddependencies = [
+    ('binutils', '2.42'),
+    ('cURL', '8.7.1'),  # Used by ReFrame to download pip in the bootstrap
 ]
 
-# We use pip, setuptools and wheel compatible with Python 3.7 and above
-# Note that ReFrame itself is compatible also with Python 3.6
-# As listed in the python_requires in https://github.com/reframe-hpc/reframe/blob/v4.7.1/setup.cfg
-# To use with Python 3.6, please install ReFrame-4.7.1-Python-3.6.eb instead
-req_py_majver = 3
-req_py_minver = 7
+# Note that for ReFrame's CPU autodetect to work
+# the system also needs to provide (new enough versions of) these dependencies
+dependencies = [
+    ('Python', '3.12.3'),
+    ('libxslt', '1.1.42'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+    ('libxml2', '2.12.7'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+]
 
 exts_list = [
-    # stick to pip 24.0, which is compatible with Python 3.7
-    # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
-    ('pip', '24.0', {
-        'use_pip': False,
-        'checksums': ['ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2'],
-    }),
-    # Require new enough setuptools to work with Python 3.12, which doesn't have pkgutil.ImpImporter anymore
-    # See https://github.com/pypa/setuptools/commit/6653e747c3815b140156249205397ef3719581ee
-    # 68.0.0 is the latest compatible with Python 3.7
-    ('setuptools', '68.0.0', {
-        'use_pip': False,
-        'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
-        'checksums': ['baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235'],
-    }),
-    # stick to wheel 0.42.0, which is compatible with Python 3.7
-    ('wheel', '0.42.0', {
-        'source_tmpl': 'wheel-%(version)s-py3-none-any.whl',
-        'checksums': ['177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d'],
-    }),
-    # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
-    # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
-    # so that ReFrame (and only ReFrame) will find & use all of these dependencies.
-    # In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
-    # b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
-    # a test will pick up on any python deps from ReFrame itself.
-    # For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
-    # for this setup.
     ('reframe', version, {
-        # Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
         'download_dep_fail': False,
-        # ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
-        # Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
-        'sanity_pip_check': False,
-        # Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
-        # This step would fail, since the regular python interpreter wouldn't find the additional packages in
-        # %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
-        # reframe command.
         'modulename': False,
-        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
-                          "./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        'sanity_pip_check': False,
         'source_tmpl': 'v%(version)s.tar.gz',
         'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
         'checksums': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
@@ -86,4 +49,10 @@ sanity_check_paths = {
 
 sanity_check_commands = ['reframe --version']
 
+# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
+# any tests by default
+modextravars = {
+    'RFM_PURGE_ENVIRONMENT': '1',
+}
+
 moduleclass = 'devel'
Diff against ReFrame-4.7.1-Python-3.6.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
index 1d11c9a167..c0e95bf7b1 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
@@ -1,73 +1,32 @@
-# This EasyConfig is made with older setuptools and wheel versions, so that it still works with Python-3.6.X
-# For newer python versions, we suggest to use ReFrame-4.6.2.eb (without suffix)
 easyblock = 'PythonBundle'
 
 name = 'ReFrame'
 version = '4.7.1'
-versionsuffix = '-Python-3.6'
 
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = SYSTEM
+toolchain = {'name': 'GCCcore', 'version': '13.3.0'}
 
-allow_system_deps = [('Python', SYS_PYTHON_VERSION)]
-
-# Required by lxml, which is installed by ReFrame's bootstrap installer
-osdependencies = [
-    ('libxml2'),
-    ('libxslt', 'libxslt1.1'),
+builddependencies = [
+    ('binutils', '2.42'),
+    ('cURL', '8.7.1'),  # Used by ReFrame to download pip in the bootstrap
 ]
 
-# Listed as python_requires in https://github.com/reframe-hpc/reframe/blob/v4.6.2/setup.cfg
-req_py_majver = 3
-req_py_minver = 6
-
-# The setuptools in this EasyConfig is the latest that works for Python 3.6, but is too old for Python 3.12
-# See https://github.com/easybuilders/easybuild-easyconfigs/pull/21269#discussion_r1741570244
-max_py_majver = 3
-max_py_minver = 11
+# Note that for ReFrame's CPU autodetect to work
+# the system also needs to provide (new enough versions of) these dependencies
+dependencies = [
+    ('Python', '3.12.3'),
+    ('libxslt', '1.1.42'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+    ('libxml2', '2.12.7'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+]
 
 exts_list = [
-    # stick to pip 21.3.1, which is compatible with Python 3.6
-    # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
-    ('pip', '21.3.1', {
-        'use_pip': False,
-        'checksums': ['fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a'],
-    }),
-    # Require new enough setuptools to install with e.g. pyproject.toml
-    # 59.6.0 is the latest compatible with Python 3.6
-    ('setuptools', '59.6.0', {
-        'use_pip': False,
-        'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
-        'checksums': ['22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373'],
-    }),
-    # stick to wheel 0.37.1, which is compatible with Python 3.6
-    ('wheel', '0.37.1', {
-        'source_tmpl': 'wheel-%(version)s-py2.py3-none-any.whl',
-        'checksums': ['4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a'],
-    }),
-    # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
-    # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
-    # so that ReFrame (and only ReFrame) will find & use all of these dependencies.
-    # In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
-    # b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
-    # a test will pick up on any python deps from ReFrame itself.
-    # For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
-    # for this setup.
     ('reframe', version, {
-        # Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
         'download_dep_fail': False,
-        # ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
-        # Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
-        'sanity_pip_check': False,
-        # Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
-        # This step would fail, since the regular python interpreter wouldn't find the additional packages in
-        # %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
-        # reframe command.
         'modulename': False,
-        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
-                          "./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        'sanity_pip_check': False,
         'source_tmpl': 'v%(version)s.tar.gz',
         'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
         'checksums': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
@@ -90,4 +49,10 @@ sanity_check_paths = {
 
 sanity_check_commands = ['reframe --version']
 
+# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
+# any tests by default
+modextravars = {
+    'RFM_PURGE_ENVIRONMENT': '1',
+}
+
 moduleclass = 'devel'
Diff against ReFrame-4.7.1-GCCcore-13.2.0.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
index d1851eb663..c0e95bf7b1 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
@@ -6,19 +6,19 @@ version = '4.7.1'
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
+toolchain = {'name': 'GCCcore', 'version': '13.3.0'}
 
 builddependencies = [
-    ('binutils', '2.40'),
-    ('cURL', '8.3.0'),  # Used by ReFrame to download pip in the bootstrap
+    ('binutils', '2.42'),
+    ('cURL', '8.7.1'),  # Used by ReFrame to download pip in the bootstrap
 ]
 
 # Note that for ReFrame's CPU autodetect to work
 # the system also needs to provide (new enough versions of) these dependencies
 dependencies = [
-    ('Python', '3.11.5'),
-    ('libxslt', '1.1.38'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
-    ('libxml2', '2.11.5'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+    ('Python', '3.12.3'),
+    ('libxslt', '1.1.42'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+    ('libxml2', '2.12.7'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
 ]
 
 exts_list = [

Updated software ReFrame-4.7.1-Python-3.6.eb

Diff against ReFrame-4.7.1.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
index afb1601f60..1d11c9a167 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
@@ -1,7 +1,10 @@
+# This EasyConfig is made with older setuptools and wheel versions, so that it still works with Python-3.6.X
+# For newer python versions, we suggest to use ReFrame-4.6.2.eb (without suffix)
 easyblock = 'PythonBundle'
 
 name = 'ReFrame'
 version = '4.7.1'
+versionsuffix = '-Python-3.6'
 
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
@@ -16,32 +19,33 @@ osdependencies = [
     ('libxslt', 'libxslt1.1'),
 ]
 
-# We use pip, setuptools and wheel compatible with Python 3.7 and above
-# Note that ReFrame itself is compatible also with Python 3.6
-# As listed in the python_requires in https://github.com/reframe-hpc/reframe/blob/v4.7.1/setup.cfg
-# To use with Python 3.6, please install ReFrame-4.7.1-Python-3.6.eb instead
+# Listed as python_requires in https://github.com/reframe-hpc/reframe/blob/v4.6.2/setup.cfg
 req_py_majver = 3
-req_py_minver = 7
+req_py_minver = 6
+
+# The setuptools in this EasyConfig is the latest that works for Python 3.6, but is too old for Python 3.12
+# See https://github.com/easybuilders/easybuild-easyconfigs/pull/21269#discussion_r1741570244
+max_py_majver = 3
+max_py_minver = 11
 
 exts_list = [
-    # stick to pip 24.0, which is compatible with Python 3.7
+    # stick to pip 21.3.1, which is compatible with Python 3.6
     # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
-    ('pip', '24.0', {
+    ('pip', '21.3.1', {
         'use_pip': False,
-        'checksums': ['ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2'],
+        'checksums': ['fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a'],
     }),
-    # Require new enough setuptools to work with Python 3.12, which doesn't have pkgutil.ImpImporter anymore
-    # See https://github.com/pypa/setuptools/commit/6653e747c3815b140156249205397ef3719581ee
-    # 68.0.0 is the latest compatible with Python 3.7
-    ('setuptools', '68.0.0', {
+    # Require new enough setuptools to install with e.g. pyproject.toml
+    # 59.6.0 is the latest compatible with Python 3.6
+    ('setuptools', '59.6.0', {
         'use_pip': False,
         'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
-        'checksums': ['baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235'],
+        'checksums': ['22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373'],
     }),
-    # stick to wheel 0.42.0, which is compatible with Python 3.7
-    ('wheel', '0.42.0', {
-        'source_tmpl': 'wheel-%(version)s-py3-none-any.whl',
-        'checksums': ['177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d'],
+    # stick to wheel 0.37.1, which is compatible with Python 3.6
+    ('wheel', '0.37.1', {
+        'source_tmpl': 'wheel-%(version)s-py2.py3-none-any.whl',
+        'checksums': ['4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a'],
     }),
     # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
     # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
Diff against ReFrame-4.7.1-GCCcore-13.3.0.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
index c0e95bf7b1..1d11c9a167 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
@@ -1,32 +1,73 @@
+# This EasyConfig is made with older setuptools and wheel versions, so that it still works with Python-3.6.X
+# For newer python versions, we suggest to use ReFrame-4.6.2.eb (without suffix)
 easyblock = 'PythonBundle'
 
 name = 'ReFrame'
 version = '4.7.1'
+versionsuffix = '-Python-3.6'
 
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = {'name': 'GCCcore', 'version': '13.3.0'}
+toolchain = SYSTEM
 
-builddependencies = [
-    ('binutils', '2.42'),
-    ('cURL', '8.7.1'),  # Used by ReFrame to download pip in the bootstrap
-]
+allow_system_deps = [('Python', SYS_PYTHON_VERSION)]
 
-# Note that for ReFrame's CPU autodetect to work
-# the system also needs to provide (new enough versions of) these dependencies
-dependencies = [
-    ('Python', '3.12.3'),
-    ('libxslt', '1.1.42'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
-    ('libxml2', '2.12.7'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+# Required by lxml, which is installed by ReFrame's bootstrap installer
+osdependencies = [
+    ('libxml2'),
+    ('libxslt', 'libxslt1.1'),
 ]
 
+# Listed as python_requires in https://github.com/reframe-hpc/reframe/blob/v4.6.2/setup.cfg
+req_py_majver = 3
+req_py_minver = 6
+
+# The setuptools in this EasyConfig is the latest that works for Python 3.6, but is too old for Python 3.12
+# See https://github.com/easybuilders/easybuild-easyconfigs/pull/21269#discussion_r1741570244
+max_py_majver = 3
+max_py_minver = 11
+
 exts_list = [
+    # stick to pip 21.3.1, which is compatible with Python 3.6
+    # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
+    ('pip', '21.3.1', {
+        'use_pip': False,
+        'checksums': ['fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a'],
+    }),
+    # Require new enough setuptools to install with e.g. pyproject.toml
+    # 59.6.0 is the latest compatible with Python 3.6
+    ('setuptools', '59.6.0', {
+        'use_pip': False,
+        'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
+        'checksums': ['22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373'],
+    }),
+    # stick to wheel 0.37.1, which is compatible with Python 3.6
+    ('wheel', '0.37.1', {
+        'source_tmpl': 'wheel-%(version)s-py2.py3-none-any.whl',
+        'checksums': ['4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a'],
+    }),
+    # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
+    # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
+    # so that ReFrame (and only ReFrame) will find & use all of these dependencies.
+    # In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
+    # b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
+    # a test will pick up on any python deps from ReFrame itself.
+    # For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
+    # for this setup.
     ('reframe', version, {
+        # Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
         'download_dep_fail': False,
-        'modulename': False,
-        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        # ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
+        # Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
         'sanity_pip_check': False,
+        # Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
+        # This step would fail, since the regular python interpreter wouldn't find the additional packages in
+        # %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
+        # reframe command.
+        'modulename': False,
+        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
+                          "./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
         'source_tmpl': 'v%(version)s.tar.gz',
         'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
         'checksums': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
@@ -49,10 +90,4 @@ sanity_check_paths = {
 
 sanity_check_commands = ['reframe --version']
 
-# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
-# any tests by default
-modextravars = {
-    'RFM_PURGE_ENVIRONMENT': '1',
-}
-
 moduleclass = 'devel'
Diff against ReFrame-4.7.1-GCCcore-13.2.0.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
index d1851eb663..1d11c9a167 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
@@ -1,32 +1,73 @@
+# This EasyConfig is made with older setuptools and wheel versions, so that it still works with Python-3.6.X
+# For newer python versions, we suggest to use ReFrame-4.6.2.eb (without suffix)
 easyblock = 'PythonBundle'
 
 name = 'ReFrame'
 version = '4.7.1'
+versionsuffix = '-Python-3.6'
 
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
+toolchain = SYSTEM
 
-builddependencies = [
-    ('binutils', '2.40'),
-    ('cURL', '8.3.0'),  # Used by ReFrame to download pip in the bootstrap
-]
+allow_system_deps = [('Python', SYS_PYTHON_VERSION)]
 
-# Note that for ReFrame's CPU autodetect to work
-# the system also needs to provide (new enough versions of) these dependencies
-dependencies = [
-    ('Python', '3.11.5'),
-    ('libxslt', '1.1.38'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
-    ('libxml2', '2.11.5'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+# Required by lxml, which is installed by ReFrame's bootstrap installer
+osdependencies = [
+    ('libxml2'),
+    ('libxslt', 'libxslt1.1'),
 ]
 
+# Listed as python_requires in https://github.com/reframe-hpc/reframe/blob/v4.6.2/setup.cfg
+req_py_majver = 3
+req_py_minver = 6
+
+# The setuptools in this EasyConfig is the latest that works for Python 3.6, but is too old for Python 3.12
+# See https://github.com/easybuilders/easybuild-easyconfigs/pull/21269#discussion_r1741570244
+max_py_majver = 3
+max_py_minver = 11
+
 exts_list = [
+    # stick to pip 21.3.1, which is compatible with Python 3.6
+    # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
+    ('pip', '21.3.1', {
+        'use_pip': False,
+        'checksums': ['fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a'],
+    }),
+    # Require new enough setuptools to install with e.g. pyproject.toml
+    # 59.6.0 is the latest compatible with Python 3.6
+    ('setuptools', '59.6.0', {
+        'use_pip': False,
+        'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
+        'checksums': ['22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373'],
+    }),
+    # stick to wheel 0.37.1, which is compatible with Python 3.6
+    ('wheel', '0.37.1', {
+        'source_tmpl': 'wheel-%(version)s-py2.py3-none-any.whl',
+        'checksums': ['4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a'],
+    }),
+    # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
+    # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
+    # so that ReFrame (and only ReFrame) will find & use all of these dependencies.
+    # In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
+    # b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
+    # a test will pick up on any python deps from ReFrame itself.
+    # For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
+    # for this setup.
     ('reframe', version, {
+        # Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
         'download_dep_fail': False,
-        'modulename': False,
-        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        # ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
+        # Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
         'sanity_pip_check': False,
+        # Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
+        # This step would fail, since the regular python interpreter wouldn't find the additional packages in
+        # %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
+        # reframe command.
+        'modulename': False,
+        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
+                          "./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
         'source_tmpl': 'v%(version)s.tar.gz',
         'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
         'checksums': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
@@ -49,10 +90,4 @@ sanity_check_paths = {
 
 sanity_check_commands = ['reframe --version']
 
-# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
-# any tests by default
-modextravars = {
-    'RFM_PURGE_ENVIRONMENT': '1',
-}
-
 moduleclass = 'devel'

Updated software ReFrame-4.7.1.eb

Diff against ReFrame-4.7.1-Python-3.6.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
index 1d11c9a167..afb1601f60 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-Python-3.6.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
@@ -1,10 +1,7 @@
-# This EasyConfig is made with older setuptools and wheel versions, so that it still works with Python-3.6.X
-# For newer python versions, we suggest to use ReFrame-4.6.2.eb (without suffix)
 easyblock = 'PythonBundle'
 
 name = 'ReFrame'
 version = '4.7.1'
-versionsuffix = '-Python-3.6'
 
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
@@ -19,33 +16,32 @@ osdependencies = [
     ('libxslt', 'libxslt1.1'),
 ]
 
-# Listed as python_requires in https://github.com/reframe-hpc/reframe/blob/v4.6.2/setup.cfg
+# We use pip, setuptools and wheel compatible with Python 3.7 and above
+# Note that ReFrame itself is compatible also with Python 3.6
+# As listed in the python_requires in https://github.com/reframe-hpc/reframe/blob/v4.7.1/setup.cfg
+# To use with Python 3.6, please install ReFrame-4.7.1-Python-3.6.eb instead
 req_py_majver = 3
-req_py_minver = 6
-
-# The setuptools in this EasyConfig is the latest that works for Python 3.6, but is too old for Python 3.12
-# See https://github.com/easybuilders/easybuild-easyconfigs/pull/21269#discussion_r1741570244
-max_py_majver = 3
-max_py_minver = 11
+req_py_minver = 7
 
 exts_list = [
-    # stick to pip 21.3.1, which is compatible with Python 3.6
+    # stick to pip 24.0, which is compatible with Python 3.7
     # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
-    ('pip', '21.3.1', {
+    ('pip', '24.0', {
         'use_pip': False,
-        'checksums': ['fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a'],
+        'checksums': ['ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2'],
     }),
-    # Require new enough setuptools to install with e.g. pyproject.toml
-    # 59.6.0 is the latest compatible with Python 3.6
-    ('setuptools', '59.6.0', {
+    # Require new enough setuptools to work with Python 3.12, which doesn't have pkgutil.ImpImporter anymore
+    # See https://github.com/pypa/setuptools/commit/6653e747c3815b140156249205397ef3719581ee
+    # 68.0.0 is the latest compatible with Python 3.7
+    ('setuptools', '68.0.0', {
         'use_pip': False,
         'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
-        'checksums': ['22c7348c6d2976a52632c67f7ab0cdf40147db7789f9aed18734643fe9cf3373'],
+        'checksums': ['baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235'],
     }),
-    # stick to wheel 0.37.1, which is compatible with Python 3.6
-    ('wheel', '0.37.1', {
-        'source_tmpl': 'wheel-%(version)s-py2.py3-none-any.whl',
-        'checksums': ['4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a'],
+    # stick to wheel 0.42.0, which is compatible with Python 3.7
+    ('wheel', '0.42.0', {
+        'source_tmpl': 'wheel-%(version)s-py3-none-any.whl',
+        'checksums': ['177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d'],
     }),
     # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
     # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
Diff against ReFrame-4.7.1-GCCcore-13.3.0.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
index c0e95bf7b1..afb1601f60 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.3.0.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
@@ -6,27 +6,64 @@ version = '4.7.1'
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = {'name': 'GCCcore', 'version': '13.3.0'}
+toolchain = SYSTEM
 
-builddependencies = [
-    ('binutils', '2.42'),
-    ('cURL', '8.7.1'),  # Used by ReFrame to download pip in the bootstrap
-]
+allow_system_deps = [('Python', SYS_PYTHON_VERSION)]
 
-# Note that for ReFrame's CPU autodetect to work
-# the system also needs to provide (new enough versions of) these dependencies
-dependencies = [
-    ('Python', '3.12.3'),
-    ('libxslt', '1.1.42'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
-    ('libxml2', '2.12.7'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+# Required by lxml, which is installed by ReFrame's bootstrap installer
+osdependencies = [
+    ('libxml2'),
+    ('libxslt', 'libxslt1.1'),
 ]
 
+# We use pip, setuptools and wheel compatible with Python 3.7 and above
+# Note that ReFrame itself is compatible also with Python 3.6
+# As listed in the python_requires in https://github.com/reframe-hpc/reframe/blob/v4.7.1/setup.cfg
+# To use with Python 3.6, please install ReFrame-4.7.1-Python-3.6.eb instead
+req_py_majver = 3
+req_py_minver = 7
+
 exts_list = [
+    # stick to pip 24.0, which is compatible with Python 3.7
+    # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
+    ('pip', '24.0', {
+        'use_pip': False,
+        'checksums': ['ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2'],
+    }),
+    # Require new enough setuptools to work with Python 3.12, which doesn't have pkgutil.ImpImporter anymore
+    # See https://github.com/pypa/setuptools/commit/6653e747c3815b140156249205397ef3719581ee
+    # 68.0.0 is the latest compatible with Python 3.7
+    ('setuptools', '68.0.0', {
+        'use_pip': False,
+        'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
+        'checksums': ['baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235'],
+    }),
+    # stick to wheel 0.42.0, which is compatible with Python 3.7
+    ('wheel', '0.42.0', {
+        'source_tmpl': 'wheel-%(version)s-py3-none-any.whl',
+        'checksums': ['177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d'],
+    }),
+    # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
+    # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
+    # so that ReFrame (and only ReFrame) will find & use all of these dependencies.
+    # In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
+    # b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
+    # a test will pick up on any python deps from ReFrame itself.
+    # For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
+    # for this setup.
     ('reframe', version, {
+        # Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
         'download_dep_fail': False,
-        'modulename': False,
-        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        # ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
+        # Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
         'sanity_pip_check': False,
+        # Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
+        # This step would fail, since the regular python interpreter wouldn't find the additional packages in
+        # %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
+        # reframe command.
+        'modulename': False,
+        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
+                          "./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
         'source_tmpl': 'v%(version)s.tar.gz',
         'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
         'checksums': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
@@ -49,10 +86,4 @@ sanity_check_paths = {
 
 sanity_check_commands = ['reframe --version']
 
-# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
-# any tests by default
-modextravars = {
-    'RFM_PURGE_ENVIRONMENT': '1',
-}
-
 moduleclass = 'devel'
Diff against ReFrame-4.7.1-GCCcore-13.2.0.eb

easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb

diff --git a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
index d1851eb663..afb1601f60 100644
--- a/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1-GCCcore-13.2.0.eb
+++ b/easybuild/easyconfigs/r/ReFrame/ReFrame-4.7.1.eb
@@ -6,27 +6,64 @@ version = '4.7.1'
 homepage = 'https://github.com/reframe-hpc/reframe'
 description = '''ReFrame is a framework for writing regression tests for HPC systems.'''
 
-toolchain = {'name': 'GCCcore', 'version': '13.2.0'}
+toolchain = SYSTEM
 
-builddependencies = [
-    ('binutils', '2.40'),
-    ('cURL', '8.3.0'),  # Used by ReFrame to download pip in the bootstrap
-]
+allow_system_deps = [('Python', SYS_PYTHON_VERSION)]
 
-# Note that for ReFrame's CPU autodetect to work
-# the system also needs to provide (new enough versions of) these dependencies
-dependencies = [
-    ('Python', '3.11.5'),
-    ('libxslt', '1.1.38'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
-    ('libxml2', '2.11.5'),  # Required by lxml, which is installed by ReFrame's bootstrap installer
+# Required by lxml, which is installed by ReFrame's bootstrap installer
+osdependencies = [
+    ('libxml2'),
+    ('libxslt', 'libxslt1.1'),
 ]
 
+# We use pip, setuptools and wheel compatible with Python 3.7 and above
+# Note that ReFrame itself is compatible also with Python 3.6
+# As listed in the python_requires in https://github.com/reframe-hpc/reframe/blob/v4.7.1/setup.cfg
+# To use with Python 3.6, please install ReFrame-4.7.1-Python-3.6.eb instead
+req_py_majver = 3
+req_py_minver = 7
+
 exts_list = [
+    # stick to pip 24.0, which is compatible with Python 3.7
+    # we still need pip outside of ReFrame's external dependencies, since the install cmd uses pip
+    ('pip', '24.0', {
+        'use_pip': False,
+        'checksums': ['ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2'],
+    }),
+    # Require new enough setuptools to work with Python 3.12, which doesn't have pkgutil.ImpImporter anymore
+    # See https://github.com/pypa/setuptools/commit/6653e747c3815b140156249205397ef3719581ee
+    # 68.0.0 is the latest compatible with Python 3.7
+    ('setuptools', '68.0.0', {
+        'use_pip': False,
+        'source_urls': ['https://pypi.python.org/packages/source/s/setuptools/'],
+        'checksums': ['baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235'],
+    }),
+    # stick to wheel 0.42.0, which is compatible with Python 3.7
+    ('wheel', '0.42.0', {
+        'source_tmpl': 'wheel-%(version)s-py3-none-any.whl',
+        'checksums': ['177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d'],
+    }),
+    # ReFrame's bootstrap script is intended to run with zero dependencies. It downloads all python deps for ReFrame
+    # into a %(installdir)/external directory. ReFrame's main executable (reframe) adds this dir to python's sys.path
+    # so that ReFrame (and only ReFrame) will find & use all of these dependencies.
+    # In EasyBuild, we should adhere to this installation method because a) it is how ReFrame is meant to be used and
+    # b) it isolates all of ReFrame dependencies from any other python code you run. Thus, there is no chance that
+    # a test will pick up on any python deps from ReFrame itself.
+    # For this to work, we need to disable download_dep_fail and sanity_pip_check, as both are _expected_ to fail
+    # for this setup.
     ('reframe', version, {
+        # Deps are downloaded to %(installdir)/external, which won't polute the PYTHONPATH, so is ok
         'download_dep_fail': False,
-        'modulename': False,
-        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && ./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
+        # ReFrame uses its custom sys.path to find necessary packages, they are not on PYTYHONPATH
+        # Thus, the regular pip sanity check is expected to fail, even if ReFrame would run just fine
         'sanity_pip_check': False,
+        # Set modulename to False, as to skip the sanity_check-step from extension.py (python -c "import reframe")
+        # This step would fail, since the regular python interpreter wouldn't find the additional packages in
+        # %(installdir)/external. That's fine, as ReFrame should never be imported directly, only through the
+        # reframe command.
+        'modulename': False,
+        'preinstallopts': "export PATH=%(installdir)s/bin:$PATH && "
+                          "./bootstrap.sh +docs +pygelf && cp --recursive external %(installdir)s && ",
         'source_tmpl': 'v%(version)s.tar.gz',
         'source_urls': ['https://github.com/reframe-hpc/reframe/archive/'],
         'checksums': ['ed693368d8b47327981a0db2b984c88d7dd703add1ffe736c95f9193ef727baf'],
@@ -49,10 +86,4 @@ sanity_check_paths = {
 
 sanity_check_commands = ['reframe --version']
 
-# Since this is at the GCCcore toolchain level, make sure ReFrame is configured to purge modules before running
-# any tests by default
-modextravars = {
-    'RFM_PURGE_ENVIRONMENT': '1',
-}
-
 moduleclass = 'devel'

@smoors
Copy link
Contributor

smoors commented Dec 19, 2024

@gkaf89 v4.7.2 has just been released, would you mind updating your PR to that one?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants